home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 21 / CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso / CUCD / Programming / gtdrag / esource / source / dragtest.e next >
Encoding:
Text File  |  1996-12-17  |  8.5 KB  |  261 lines

  1. /*  dragtest.e - Test of gtdrag.library 1996-12-17
  2.     Based on Axel Dörfler's program.
  3.     Converted to E by Daniel Rost.
  4.     1996-12-15
  5.     small changes at insertat()/moveto() 1996-12-17 by Axel Dörfler
  6.     Please note, that the executable program does not reflect these */
  7.  
  8. OPT PREPROCESS
  9.  
  10. MODULE 'exec/nodes','exec/lists','exec/ports',
  11.         'exec/memory','intuition/intuition','intuition/gadgetclass',
  12.         'libraries/gadtools','intuition/screens',
  13.         'utility/tagitem','gadtools','graphics/text',
  14.         'gtdrag','libraries/gtdrag'
  15.  
  16. #define TLn(t) TextLength(scr.rastport,t,StrLen(t))
  17.  
  18. DEF win:PTR TO window,glist=NIL:PTR TO gadget,
  19.     lvgad[2]:ARRAY OF LONG,gad[3]:ARRAY OF LONG, ->array of ptr to gadget
  20.     list[2]:ARRAY OF lh,node:PTR TO ln,
  21.     in:PTR TO imagenode,txt:PTR TO LONG,newimg:PTR TO image,
  22.     scr:PTR TO screen,vi:PTR TO LONG,fontheight
  23.  
  24. PROC insertat(l:PTR TO lh,n:PTR TO ln,pos)
  25.   DEF pn:PTR TO ln,i
  26.  
  27.   pn:=l
  28.   FOR i:=0 TO pos-1
  29.     pn:=pn.succ
  30.   ENDFOR
  31. ->    FOR(pn = l->lh_Head,i = 0;i<pos;pn = pn->ln_Succ,i++);
  32.   Insert(l,n,pn)
  33. ENDPROC
  34.  
  35. PROC moveto(n:PTR TO ln,l1:PTR TO lh,pos1,l2:PTR TO lh,pos2)
  36.   DEF pn:PTR TO ln,i=0
  37.  
  38.   IF l1=l2 AND (pos1=pos2) THEN RETURN
  39.   Remove(n)
  40.  
  41.   IF l1=l2 AND (pos1<pos2) THEN DEC pos2
  42.  
  43.   pn:=l2
  44.   WHILE (i<pos2) AND pn.succ
  45.    pn:=pn.succ
  46.    INC i
  47.   ENDWHILE
  48.  
  49.   Insert(l2,n,pn)
  50. ENDPROC
  51.  
  52. PROC processmsg()
  53.    DEF msg:PTR TO intuimessage,dm:PTR TO dragmsg,source,target,
  54.         sel,ende=FALSE
  55.  
  56.   WHILE(ende=FALSE)
  57.     WaitPort(win.userport)
  58.     WHILE (msg:=GtD_GetIMsg(win.userport))
  59.       IF (dm:=GtD_GetDragMsg())
  60.         IF dm.sourceapp
  61.           DisplayBeep(NIL)
  62.         ELSE
  63.           sel:=dm.type
  64.           SELECT sel
  65.             CASE DMT_GADGET
  66.               target:=dm.target::draggadget.gadget.gadgetid
  67.               source:=dm.source.gadget.gadgetid
  68.  
  69.               IF target=1 OR (target=2)
  70.                 IF source<3
  71.                   DEC source
  72.                   DEC target
  73.                   Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,-1,TAG_END])
  74.                   Gt_SetGadgetAttrsA(lvgad[1],win,NIL,[GTLV_LABELS,-1,TAG_END])
  75.                   moveto(dm.object,list[source],dm.sourceentry,list[target],dm.targetentry)
  76.                   Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,list[0],TAG_END])
  77.                   Gt_SetGadgetAttrsA(lvgad[1],win,NIL,[GTLV_LABELS,list[1],TAG_END])
  78.                 ELSE
  79.                   DEC target
  80.                   Gt_SetGadgetAttrsA(lvgad[target],win,NIL,[GTLV_LABELS,-1,TAG_END])
  81.                   NEW node
  82.                   node.name:=in.name
  83.                   insertat(list[target],node,dm.targetentry)
  84.                   Gt_SetGadgetAttrsA(lvgad[target],win,NIL,[GTLV_LABELS,list[target],TAG_END])
  85.                 ENDIF
  86.               ENDIF
  87.               target:=dm.target::draggadget.gadget.gadgetid
  88.               SELECT target
  89.                 CASE 3
  90.                   DisplayBeep(NIL)
  91.                 CASE 4
  92.                   IF source=1 OR (source=2)
  93.                     Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,-1,TAG_END])
  94.                     NEW node
  95.                     node.name:=dm.object.name
  96.                     AddTail(list[source-1],node)
  97.                     Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,list[source-1],TAG_END])
  98.                   ELSE
  99.                     DisplayBeep(NIL)
  100.                   ENDIF
  101.                 CASE 5
  102.                   IF source=1 OR (source=2)
  103.                     Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,-1,TAG_END])
  104.                     Remove(dm.object)
  105.                     Dispose(dm.object)
  106.                     Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,list[source-1],TAG_END])
  107.                   ELSE
  108.                     DisplayBeep(NIL)
  109.                   ENDIF
  110.               ENDSELECT
  111.             CASE DMT_UNKNOWN
  112.               DisplayBeep(NIL)
  113.             CASE DMT_WINDOW
  114.           ENDSELECT
  115.         ENDIF
  116.         GtD_ReplyDragMsg(dm)
  117.       ENDIF
  118.       sel:=msg.class
  119.       SELECT sel
  120.         CASE IDCMP_GADGETDOWN
  121.         CASE IDCMP_GADGETUP
  122.           IF msg.iaddress::gadget.gadgetid=3
  123.             Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,-1,TAG_END])
  124.             NEW node
  125.             node.name:=in.name
  126.             AddTail(list[0],node)
  127.             Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,list[0],TAG_END])
  128.           ENDIF
  129.         CASE IDCMP_CLOSEWINDOW
  130.           ende:=TRUE
  131.       ENDSELECT
  132.       GtD_ReplyIMsg(msg)
  133.     ENDWHILE
  134.   ENDWHILE
  135. ENDPROC
  136.  
  137. PROC initwindow()
  138.     DEF win:PTR TO window,ng:newgadget
  139.  
  140.     gad[0]:=CreateContext({glist})
  141.  
  142.     ng.leftedge:=8
  143.     ng.topedge:=fontheight+7
  144.     ng.width:=192
  145.     ng.height:=11*fontheight+4
  146.     ng.visualinfo:=vi
  147.     ng.textattr:=scr.font
  148.     ng.gadgettext:=NIL
  149.     ng.userdata:=NIL
  150.     ng.gadgetid:=1
  151.     lvgad[0]:=CreateGadgetA(LISTVIEW_KIND,gad[0],ng,[GTLV_LABELS,list[0],TAG_END])
  152.  
  153.     ng.leftedge:=206
  154.     ng.width:=186
  155.     ng.gadgettext:=NIL
  156.     ng.gadgetid:=ng.gadgetid+1
  157.     lvgad[1]:=CreateGadgetA(LISTVIEW_KIND,lvgad[0],ng,[GTLV_LABELS,list[1],TAG_END])
  158.  
  159.     ng.topedge:=ng.topedge+ng.height+3
  160.     ng.leftedge:=8
  161.     ng.height:=fontheight+4
  162.     ng.width:=TLn('new')+16
  163.     ng.flags:=PLACETEXT_IN
  164.     ng.gadgettext:='new'
  165.     ng.gadgetid:=ng.gadgetid+1
  166.     gad[0]:=CreateGadgetA(BUTTON_KIND,lvgad[1],ng,[GA_IMMEDIATE,TRUE,TAG_END])
  167.  
  168.     ng.leftedge:=ng.leftedge+ng.width+6
  169.     ng.width:=TLn('Copy')+16
  170.     ng.gadgettext:='Copy'
  171.     ng.gadgetid:=ng.gadgetid+1
  172.     gad[1]:=CreateGadgetA(BUTTON_KIND,gad[0],ng,[TAG_END])
  173.  
  174.     ng.leftedge:=ng.leftedge+ng.width+6
  175.     ng.width:=TLn('Delete')+16
  176.     ng.gadgettext:='Delete'
  177.     ng.gadgetid:=ng.gadgetid+1
  178.     gad[2]:=CreateGadgetA(BUTTON_KIND,gad[1],ng,[TAG_END])
  179.  
  180.     IF (win:=OpenWindowTagList(NIL,[WA_TITLE,'gtdrag - Test',
  181.                                 WA_FLAGS,   WFLG_CLOSEGADGET OR WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR WFLG_ACTIVATE,
  182.                                 WA_IDCMP,   IDCMP_CLOSEWINDOW OR DRAGIDCMP,
  183.                                 WA_WIDTH,   400,
  184.                                 WA_HEIGHT,  fontheight*13+23,
  185.                                 WA_GADGETS, glist,
  186.                                 TAG_END]))
  187.       Gt_RefreshWindow(win,NIL)
  188.       GtD_AddGadgetA(LISTVIEW_KIND,lvgad[0],win,[GTDA_MASK,1,GTDA_SAME,TRUE,TAG_END])
  189.       GtD_AddGadgetA(LISTVIEW_KIND,lvgad[1],win,[GTDA_MASK,1,GTDA_SAME,TRUE,TAG_END])
  190.       GtD_AddGadgetA(BUTTON_KIND,gad[0],win,[GTDA_IMAGES,TRUE,GTDA_OBJECT,in,
  191.                                               GTDA_MASK,       2,
  192.                                               GTDA_ACCEPTMASK, 0,
  193.                                               GTDA_WIDTH,newimg.width,
  194.                                               GTDA_HEIGHT,newimg.height,
  195.                                               TAG_END])
  196.       GtD_AddGadgetA(BUTTON_KIND,gad[1],win,[GTDA_ACCEPTMASK,1,TAG_END])
  197.       GtD_AddGadgetA(BUTTON_KIND,gad[2],win,[GTDA_ACCEPTMASK,1,TAG_END])
  198.       GtD_AddWindowA(win,[TAG_END])
  199.       RETURN win
  200.     ENDIF
  201.     RETURN FALSE
  202. ENDPROC
  203.  
  204. PROC init()
  205.   DEF i
  206.  
  207.   list[0].tail:=NIL; list[0].tailpred:=list[0]; list[0].head:=list[0]+4
  208.   list[1].tail:=NIL; list[1].tailpred:=list[1]; list[1].head:=list[1]+4
  209.  
  210.   FOR i:=0 TO 19
  211.     NEW node
  212.     node.name:=txt[i]
  213.     AddTail(list[0],node)
  214.   ENDFOR
  215.   in.name:='** New **'
  216.   in.image:=newimg
  217. ENDPROC
  218.  
  219. PROC main()
  220.   DEF newimgdata:PTR TO INT
  221.  
  222.   newimgdata:=NewM((SIZEOF INT)*52,MEMF_CHIP)
  223.   CopyMem([       /* Plane 0 */
  224.         $0000,$0020,$3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,
  225.         $3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,
  226.         $3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,
  227.         $7FFF,$FFE0,
  228.         /* Plane 1 */
  229.         $FFFF,$FFC0,$FFFF,$FF80,$F3BF,$FF80,$F3BF,$FF80,
  230.         $F5B3,$6D80,$F5AD,$6D80,$F6A1,$AB80,$F6AF,$AB80,
  231.         $F72D,$D780,$F733,$D780,$FFFF,$FF80,$FFFF,$FF80,
  232.         $8000,$0000]:INT,newimgdata,(SIZEOF INT)*52)
  233.  
  234.   newimg:=[0,0,27,13,2,newimgdata,$0003,$0000,NIL]:image
  235.   txt:=['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20']
  236.   NEW in
  237.  
  238.   IF (gtdragbase:=OpenLibrary('gtdrag.library',1))
  239.     IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))
  240.       IF (GtD_AddAppA('dragtest',[TAG_END]))
  241.         IF scr:=LockPubScreen(NIL)
  242.           vi:=GetVisualInfoA(scr,[TAG_END])
  243.           fontheight:=scr.font.ysize
  244.           init()
  245.           IF (win:=initwindow())
  246.             processmsg()
  247.             CloseWindow(win)
  248.           ENDIF
  249.  
  250.           FreeVisualInfo(vi)
  251.           UnlockPubScreen(NIL,scr)
  252.         ENDIF
  253.         GtD_RemoveApp()
  254.       ENDIF
  255.       CloseLibrary(gadtoolsbase)
  256.     ENDIF
  257.     CloseLibrary(gtdragbase)
  258.   ENDIF
  259. ENDPROC
  260.  
  261.